/**
 * Copyright(c) 2015 Jade Techonologies Co., Ltd.
 *
 * History:
 *   14-8-1 上午9:51 Created by Daisy
 */
package com.jade.framework.mom;

/**
 * 消息生产者，暂时不提供顺序消息、事务消息。
 *
 * @author Daisy
 * @version 1.0 14-8-1 上午9:51
 */
public interface MomProducer
{
    /**
     * 发送消息。
     *
     * @param topic      消息主题
     * @param key        消息key
     * @param tag        消息标签
     * @param delayLevel 延迟级别
     * @param msg        消息体
     * @return 消息发送结果
     * @throws MomException 消息发送异常
     */
    public MomSendResult send(String topic, String key, String tag, int delayLevel, Object msg)
            throws MomException;

    /**
     * 发送消息。
     *
     * @param message 消息对象
     * @return 消息发送结果
     * @throws MomException 消息发送异常
     */
    public MomSendResult send(MomMessage message)
            throws MomException;

    /**
     * 发送消息。
     *
     * @param message  消息对象
     * @param callback 发送回调器
     * @throws MomException 消息发送异常
     */
    public void send(MomMessage message, MomSendCallback callback)
            throws MomException;

    /** 启动生产者。 */
    public void start();

    /** 关闭生产者。 */
    public void stop();

    /**
     * 生产者是否已经启动。
     *
     * @return 生产者已经启动，返回true；否则返回false.
     */
    public boolean isStarted();

    /**
     * 生产者是否已经关闭。
     *
     * @return 生产者已经关闭，返回true；否则返回false.
     */
    public boolean isStopped();
}
